#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"

//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用，未经作者许可，不得用于其它任何用途
//ALIENTEK精英STM32开发板
//外部中断 驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/3
//版本：V1.0
//版权所有，盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved									  
//////////////////////////////////////////////////////////////////////////////////   
//外部中断0服务程序
void EXTIX_Init(void)
{
	GPIO_InitTypeDef gpop_;
	EXTI_InitTypeDef exit_;
	NVIC_InitTypeDef  exti_pc8_nvic;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOC,ENABLE);
	
	gpop_.GPIO_Mode = GPIO_Mode_IPU;
	gpop_.GPIO_Pin = GPIO_Pin_8;
	GPIO_Init(GPIOC,&gpop_);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource8);
	
	exit_.EXTI_Line = EXTI_Line8;
	exit_.EXTI_Mode = EXTI_Mode_Interrupt;
	exit_.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
	
	EXTI_Init(&exit_);
	
	exti_pc8_nvic.NVIC_IRQChannel = EXTI9_5_IRQn;
	exti_pc8_nvic.NVIC_IRQChannelCmd = ENABLE;
	exti_pc8_nvic.NVIC_IRQChannelPreemptionPriority = 0;
	exti_pc8_nvic.NVIC_IRQChannelSubPriority = 0;
	
	EXTI_ClearITPendingBit(EXTI_Line8);  //清除LINE4上的中断标志位  
	
	NVIC_Init(&exti_pc8_nvic);
}

//外部中断0服务程序 
void EXTI0_IRQHandler(void)
{
	delay_ms(10);//消抖
	if(WK_UP==1)	 	 //WK_UP按键
	{				 
		BEEP=!BEEP;	
	}
	EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位  
}
 

//外部中断3服务程序
void EXTI3_IRQHandler(void)
{
	delay_ms(10);//消抖
	if(KEY1==0)	 //按键KEY1
	{				 
		LED1=!LED1;
	}		 
	EXTI_ClearITPendingBit(EXTI_Line3);  //清除LINE3上的中断标志位  
}

void EXTI4_IRQHandler(void)
{
	delay_ms(10);//消抖
	if(KEY0==0)	 //按键KEY0
	{
		LED0=!LED0;
		LED1=!LED1; 
	}		 
	EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
}
 
void EXTI9_5_IRQHandler(void)
{
	printf("PC8 下降沿触发\r\n");
	EXTI_ClearITPendingBit(EXTI_Line8);
}

